import java.util.PriorityQueue;

/*
 * @lc app=leetcode.cn id=703 lang=java
 *
 * [703] 数据流中的第 K 大元素
 */

// @lc code=start
class KthLargest {
    //用优先队列 ，也就是小根堆，始终让堆的大小为K，这样堆顶就是所需要返回的值
    PriorityQueue<Integer> p ;
    int k ;

    public KthLargest(int k, int[] nums) {
        this.k = k;
        this.p = new PriorityQueue<>(k);
        for (int i : nums) {
            add(i);
        }
    }
    
    public int add(int val) {//每次返回第k个大小的值。
        if(p.size()<k){
            p.offer(val);//插入元素
        }
        else if(p.peek() < val){
            p.poll();//删去堆顶
            p.add(val);//然后把这个元素加入
        }
        //题目数据保证，在查找第 k 大元素时，数组中至少有 k 个元素
        //所以在前期的时候这个地方也会返回元素，不要紧么？
        return p.peek();
    }
}

/**
 * Your KthLargest object will be instantiated and called as such:
 * KthLargest obj = new KthLargest(k, nums);
 * int param_1 = obj.add(val);
 */
// @lc code=end

